home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1997 January / Macworld (1997-01).dmg / Games World / For Mac Doom / Utilities / MDU 1.4.6 / Patch Format < prev    next >
Text File  |  1996-11-05  |  3KB  |  31 lines

  1. MDU Patch Format X
  2. If you are intersted in supporting this format in an editor you can email me for more information at milngavie@globalnet.co.uk. Also I've not completed the specification for type 'Y' scripts. If anyone wants to have a say in the development of type 'Y' please email. Type 'Y' is intended for editors which would replace the complete entry for a monster. Type 'Z' is a hybrid version containing identification blocks which identify the following blocks of data as either type 'X' or type 'Y'. These formats may never materialise if I don't find a good reason to support them. Type 'X' is the only format currently implemented and the only format that MDU requires.
  3.  
  4. Patches begin with a header as shown below. They then have a series of blocks written one after another with no padding bytes. A termination block is then written at the end of the file. This is just a block with the platform byte set to 2 to break out of MDUs procesing loop. All other bytes in the termination block should be zero. All unused numbers should be set to zero. You can't miss out any of the parts of a block. If they are not used they must be zero.
  5.  
  6. You might think that type 'X' blocks are not as efficient as they could be. I could have used a single unsigned long instead of having three seperate numbers of different length in a type 'X' block. There is a reason for this - the longest unused block could potentially hold more data - that's why you should set unused parts to zeros. MDU may in the future, encode more data in the parts of blocks which are normally set to zero.
  7.  
  8. Never write data after the termination block. Although this will work with MDU, it could make the patches impossible to add entries to or cause corruption of the patch when MDU attempts to write more data into it.
  9.  
  10. //script header - 9 bytes
  11. typedef struct {
  12. unsigned char header; //either 'X', 'Y' or 'Z', depending if it's offset or block replace
  13. unsigned char creator[8]; //program that created patch padded with zeros 
  14. } ScriptPatchHeader;
  15.  
  16. Below: Type 'X' block. NOT given as a structure. unsigned char is an unsigned byte, unsigned short is an unsigned 16 bit word. unsigned long is an unsigned 32 bit word. long is a signed 32 bit word.
  17.  
  18. //script block type 'X' - 13 bytes
  19.  
  20. unsigned char platform; //0 - 68K, 1 - PowerPC, 2 - termination block
  21. long patchOffset; //offset to patch (always positive, relative to start of file)
  22. unsigned char numLen; //0 - byte, 1 - short, 2 - long
  23. unsigned char replaceNumByte; //replacement numbers of various lengths
  24. unsigned short replaceNumShort; //unused numbers should be set at zero
  25. unsigned long replaceNumLong; //numLen shows which number is used
  26.  
  27. Remember structures MAY NOT have a size which is the sum of the sizes of their component variables. Be careful. Padding bytes are not supported.
  28. Use the sizeof operator to find the size of a structure.
  29.  
  30. This patch format information is part of the MDU package. You may use this information to write your own patch editors, installers etc. Please make it clear if your program is compatible with the MDU patch format.
  31. ©1996 Keith Miller